package cn.base.day12;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;

public class NamesFrame extends JFrame {
    public static void main(String[] args) throws IOException {
        new NamesFrame();
    }

    public NamesFrame() throws HeadlessException, IOException {
        init();
    }

    /**
     * 初始化布局
     */
    private void init() throws IOException {
        //设置窗体。
        this.setTitle("随机点名器");
        this.setSize(600, 400);
        this.setLocationRelativeTo(null);//软件居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击叉号结束程序
        this.setResizable(false);//取消窗口拖拽大小的功能
        //Borderlayout 边框布局
        this.setLayout(new BorderLayout());

        //两个面板容器
        JPanel jp1 = new JPanel();
        //设置流式布局
        jp1.setLayout(new FlowLayout(FlowLayout.CENTER, 12, 10));
        //jp1里添加所有名字的按钮
        //读取存有名字的文件
        BufferedReader br = new BufferedReader(new FileReader("src/a.txt"));
        String name;
        while ((name = br.readLine()) != null) {
            //生成一个JButton 内容是name
            JButton jbtn = new JButton(name);
            jbtn.setPreferredSize(new Dimension(100, 40));
            jbtn.setBackground(Color.PINK);
            jbtn.setForeground(Color.BLACK);
            jbtn.setFont(new Font("宋体", Font.BOLD, 15));
            //把按钮添加到布局容器里
            jp1.add(jbtn);
        }
        // 一个放到中间
        this.add(jp1, BorderLayout.CENTER);

        JPanel jp2 = new JPanel();
        //jp2添加一个 点名按钮4
        JButton startBtn = new JButton("开始");
        jp2.add(startBtn);

        Random r = new Random();

        //设置开始按钮的点击监听
        startBtn.addActionListener(new ActionListener() {
            //定义一个布尔变量 表示点名是否开启
            boolean isStart = false;
            //定义了一个匿名内部类的成员变量用来保存每次点亮的按钮
            Component rComponent = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                //每次点击按钮切换 点名器的状态
                isStart = !isStart;
                //获取到面板里所有的组件 也就是名字按钮
                Component[] components = jp1.getComponents();

                if (isStart) {
                    startBtn.setText("停止");
                } else {
                    startBtn.setText("开始");
                }

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //整个死循环是对页面不停的做更新 要放到子线程 否则会卡死主线程
                        while (isStart) {
                            //把上一次点亮的按钮 回复到之前的颜色
                            if (rComponent != null) {
                                rComponent.setBackground(Color.PINK);
                                rComponent.setForeground(Color.BLACK);
                            }

                            // 1 从components数组里 随机找到一个名字按钮
                            int index = r.nextInt(components.length);
                            //获取到随机按钮
                            rComponent = components[index];
                            // 2 把这个按钮 背景色 修改为蓝色
                            rComponent.setBackground(Color.cyan);
                            rComponent.setForeground(Color.RED);
                            try {
                                //每次循环 都要休息50ms
                                Thread.sleep(50);
                            } catch (InterruptedException ex) {
                                throw new RuntimeException(ex);
                            }
                        }
                    }
                }).start();
            }
        });

        // 一个放到南边
        this.add(jp2, BorderLayout.SOUTH);

        this.setVisible(true);
    }
}
